package com.citywithincity.utils;

import java.security.Key;
import java.util.Date;

import javax.crypto.spec.SecretKeySpec;

import io.jsonwebtoken.JwtException;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

/**
 * 
 * @author renxueliang
 *
 */
public class JwtUtil {

	/**
	 * 生成JWT
	 * @param token				token
	 * @param iss				签发者(平台，ecard/ebusiness等)
	 * @param subject			对象（app、web、wx，这里使用渠道号）
	 * @param expSenconds		超时时间（秒）
	 * @param sec				加密秘钥   64位
	 * @return
	 */
	public static String create(String token, String iss, String subject, long expSeconds,  byte[] sec) {
		Key key =  new SecretKeySpec(sec, SignatureAlgorithm.HS512.getJcaName());
		String compactJws = Jwts.builder()
		  .setId(token)
		  .setHeaderParam("rand_str", MD5Util.md5Appkey( String.valueOf( Math.random() * System.currentTimeMillis()))  )
		  .setSubject(subject)
		  .setIssuer(iss)
		  .setExpiration(new Date(System.currentTimeMillis() + expSeconds * 1000))
		  .setIssuedAt(new Date())
		  .signWith(SignatureAlgorithm.HS512, key)
		  .compact();
		return compactJws;
	}


	/**
	 * 验证
	 * @param compactJws		
	 * @param sec				64位
	 * @return
	 */
	public static String verify(String compactJws,byte[] sec) throws JwtException{
		return Jwts.parser().setSigningKey(sec).parseClaimsJws(compactJws).getBody().getId();
	}
	

}
